#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//int main()
//{
//	int arr[] = { 1,3,5,7,9,2,4,6,8,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	int max = arr[0];
//	for (i = 1; i < sz ; i++)
//	{
//		if (arr[i] > max);
//		{
//			max = arr[i];
//		}
//	}
//	printf("%d\n", max);
//	return 0;
//}
//int my_strlen(const char* str)
//{
	/*int count = 0;
	while (*str++)
	{
		count++;
	}
	return count;*/
	/*char* tmp = str;
	while (*str++)
	{
		;
	}
	return str -1- tmp;*/

//}
//char *my_strcpy(char* dest, const char* sour)
//{
//	char* tmp = dest;
//	while (*dest++ = *sour++)
//	{
//		;
//	}
//	return tmp;
//}
//
//int main()
//{
//	/*int ret = my_strlen("hello world!!");
//	printf("%d\n", ret);*/
//	char ch[] = "hello world,bits";
//	char ar[20] = { 0 };
//	char* p = " ,";
//	char* ret = NULL;
//	for (ret = strtok(ch, p); ret != NULL; ret = strtok(NULL, p))
//	{
//		printf("%s\n", ret);
//	}
//	//printf("%s\n",my_strcpy(ar, ch));
//	return 0;
//}

//char* my_strcat(char* dest, const char* sour)
//{
//	char* tmp = dest;
//	while(*dest)
//	{
//		dest++;
//	}
//	while (*dest++ = *sour++)
//	{
//		;
//	}
//	return tmp;
//}
//
//int main()
//{
//	char ch[20] = "hello ";
//	char ar[] = "world!!!";
//	printf("%s\n", my_strcat(ch,ar));
//	return 0;
//}
//char *my_strstr(const char *str,const char *s)
//{
//	const char* s1 = NULL;
//	const char* s2 = NULL;
//	const char* cp = str;
//	while (*cp)
//	{
//		s1 = cp;
//		s2 = s;
//		while(s1 && s2 && (*s1++ == *s2++))
//		{
//			;
//		}
//		s2--;
//		if (*s2 == '\0')
//			return (char *)cp;
//		cp++;
//	}
//	return  NULL;
//}
//
//int main()
//{
//	char ch1[] = "abbbcdef";
//	char ch2[] = "bbc";
//	char *ret=my_strstr(ch1, ch2);
//	if (NULL != ret)
//	{
//		printf("%s\n", ret);
//	}
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//void* my_memcpy(void* dest, const void* sour, size_t n)
//{
//	char* s1 = (char*)dest;
//	char* s2 = (char*)sour;
//	while (n--)
//	{
//		*s1++ = *s2++;
//	}
//	return dest;
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int ch[10] = { 0 };
//	my_memcpy(ch, arr, 40);
//	for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
//	{
//		printf("%d ", ch[i]);
//	}
//	return 0;
//}
//void* my_memmove(void* dest, const void* sour, size_t n)
//{
//	char* s1 = (char*)dest;
//	char* s2 = (char*)sour;
//	if (s1 < s2)
//	{
//		while (n--)
//		{
//			*s1++ = *s2++;
//		}
//		
//	}
//	else
//	{
//		while (n--)
//		{
//			*(s1 + n) = *(s2 + n);
//		}
//	} 
//	return dest;
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	my_memmove(arr+2, arr, 20);
//
//	return 0;
//}
//int main()
//{
//	char a[20] = { 0 };
//	memset(a, 'a', 20);
//	return 0;
//}
//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	for (int i = 0; i < 10; i++)
//	{
//		p[i] = i;
//	}
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	printf("\n");
//	int* ptr = realloc(p, 20 * sizeof(int));
//	if (ptr != NULL)
//	{
//		p = ptr;
//	}
//	for (int i = 10; i < 20; i++)
//	{
//		p[i] = i;
//	}
//	for (int i = 0; i < 20; i++)
//	{
//		printf("%d ", p[i]);
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}
//int main()
//{
//	char* p = calloc(10, 1);
//	if (p == NULL)
//	{
//		perror("calloc");
//		return 1;
//	}
//	for (int i = 0; i < 10; i++)
//	{
//		p[i] = 97 + i;
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ret=fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
// 
//int main()
//{
//	int ret=fgetc(stdin);
//	printf("%c\n", ret);
//	ret = fgetc(stdin);
//	printf("%c\n", ret);
//	ret = fgetc(stdin);
//	printf("%c\n", ret);
//	ret = fgetc(stdin);
//	printf("%c\n", ret);
//	return  0;
//}
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (NULL == pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputc('a', stdout);
//	fputc('a', stdout);
//	fputc('a', stdout);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (NULL == pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputs("hello world", pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (NULL == pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	char ch[20] = { 0 };
//	fgets(ch,10, pf);
//	printf("%s\n", ch);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	char ch[20] = { 0 };
//	fgets(ch, 19, stdin);
//	printf("\n%s\n", ch);
//	return 0;
//}
//int main()
//{
//	char p[] = "hello world";
//	fputs(p, stdout);
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (NULL == pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fprintf(pf, "%s", "helloworld");
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//void move(char pos1, char pos2)
//{
//	printf("%c->%c  ", pos1, pos2);
//}
//void haono(int n, char pos1, char pos2, char pos3)
//{
//	if (n == 1)
//		move(pos1, pos3);
//	else
//	{
//		haono(n - 1, pos1, pos3, pos2);
//		move(pos1, pos3);
//		haono(n - 1, pos2, pos1, pos3);
//	}
//
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	haono(n, 'A', 'B', 'C');
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fputc('h', pf);
//	fputc('e', pf);
//	fputc('l', pf);
//	fputc('l', pf);
//	fputc('o', pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (NULL == pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	//fputc('a', stdout);
//	int ret = fgetc(stdin);
//	printf("%c\n", ret);
//	ret = fgetc(stdin);
//	printf("%c\n", ret);
//	ret = fgetc(stdin);
//	printf("%c\n", ret);
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (NULL == pf)
//	{
//		perror(fopen);
//		return 1;
//	}
//	fputs("abcdef\n", pf);
//	fputs("zxcasd\n", pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	fputs("abcdef\n", stdout);
//	fputs("zxcasd\n", stdout);
//	
//	return 0;
//}
//
//int main()
//{
//	char arr[20] = { 0 };
//	FILE* pf = fopen("text.txt", "r");
//	if (NULL == pf)
//	{
//		perror(fopen);
//		return 1;
//	}
//	fgets(arr, 6, pf);
//	printf("%s", arr);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	fgets(arr, 10, stdin);
//	printf("%s\n", arr);
//	return 0;
//}
//#include <stdio.h>
//
//int DigitSum(int n)
//{
//	if (n > 9)
//		return DigitSum(n / 10) + n % 10;
//	else
//		return n;
//}
//
//int main()
//{
//	unsigned int n = 0;
//	scanf("%u", &n);
//	int ret = DigitSum(n);
//	printf("%d", ret);
//	return 0;
//}
//#include <stdio.h>
//double my_pow(int n, int k)
//{
//	if (k > 1)
//		return n * my_pow(n, k - 1);
//	else if (k < 0)
//		return 1.0 / my_pow(n, -k);
//	else
//		return n;
//}
//
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d %d", &n, &k);
//	double ret = my_pow(n, k);
//	printf("%lf", ret);
//	return 0;
//}
#include <stdio.h>
#include <assert.h>

int my_strlen(char* c)
{
	/*if (*c)
	{
		return 1 + my_strlen(c+1);
	}
	else
		return 0;*/
	int count = 0;
	while (*c++)
	{
		count++;
	}
	return count;
}

void reverse_string(char* c)
{
	assert(*c);
	char* left = c;
	char* right = c + my_strlen(c) - 1;
	char t = *left;
	*left = *right;
	*right = '\0';
	if (my_strlen(c) >= 2)
		reverse_string(c + 1);
	*right = t;
	

}

int main()
{
	char ch[] = "abcdefg";
	reverse_string(ch);
	printf("%s", ch);
	return 0;
}

